home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Portable Patmos 1.1 / patmos-src / src / chmod.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-19  |  1.7 KB  |  68 lines  |  [TEXT/KAHL]

  1. #include "crtlocal.h"
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4.  
  5. int mknod(const char *name, mode_t flags, dev_t device)
  6.         {
  7.         OSErr   err;
  8.         FInfo info;
  9.         int fd,refnum;
  10.         HParamBlockRec pb;
  11.         FSSpec name1 = hfs_canon(crt_parID, name, 1);
  12.         if (!*name1.name) return -1;
  13.         pb.ioParam.ioNamePtr = name1.name;
  14.         pb.ioParam.ioVRefNum = name1.vRefNum;
  15.         pb.fileParam.ioDirID = name1.parID;
  16.         err = errtran(PBHCreateSync(&pb));
  17.         if (!err)
  18.             {
  19.             err = errtran(FSpGetFInfo(&name1, &info));
  20.             if (!err)
  21.                 {
  22.                 info.fdType = (flags & 0xFFFF)*0x10001;
  23.                 info.fdFldr = device;
  24.                 err = errtran(FSpSetFInfo(&name1, &info));
  25.                 }
  26.             return err?-1:0;
  27.             }
  28.         }
  29.  
  30. int chmod(const char *name, mode_t flags)
  31.         {
  32.         OSErr   err;
  33.         FInfo info;
  34.         FSSpec name1 = hfs_canon(crt_parID, name, 1);
  35.         if (!*name1.name) return -1;
  36.         err = errtran(FSpGetFInfo(&name1, &info));
  37.         if (!err)
  38.             {
  39. #if 1
  40.                if (info.fdType == 
  41.                        (info.fdType&0xFFFF)*0x10001)
  42.                    {
  43.                 info.fdType &= ~0x0FFF0FFF;
  44.                 info.fdType |= (flags & 07777)*0x10001;
  45.                 }
  46.             else
  47. #endif
  48.                 info.fdType = (S_IFREG|(flags & 07777))*0x10001;
  49.             err = errtran(FSpSetFInfo(&name1, &info));
  50.             }
  51.         return err?-1:0;
  52.         }
  53.  
  54. int chown(const char *name, uid_t owner, gid_t group)
  55.         {
  56.         OSErr   err;
  57.         FInfo info;
  58.         FSSpec name1 = hfs_canon(crt_parID, name, 1);
  59.         if (!*name1.name) return -1;
  60.         err = errtran(FSpGetFInfo(&name1, &info));
  61.         if (!err)
  62.             {
  63.             info.fdCreator = (owner<<16)|(group&0xFFFF);
  64.             err = errtran(FSpSetFInfo(&name1, &info));
  65.             }
  66.         return err?-1:0;
  67.         }
  68.